\section{Integração de Linguagens de programação e Bases de dados}
\label{sec:lp-vs-db}

A integração de bases de dados e linguagens de programação é um problema que existe quase há 50 anos \cite{Cook2005} e que é conhecido por \emph{impedance mismatch} \cite{Cook2005,Huang1995,IMAmbler2009}. 
Uma das principais razões da existência deste problema é o facto de estas duas entidades terem sido desenvolvidas independentemente, durante muitos anos \cite{Atkinson1988}. 
E como consequência surgiram incompatibilidades na interoperabilidade entre a interface das linguagens procedimentais e a interface das linguagens \emph{query} das bases de dados.
Exemplos dessas incompatibilidades são programas imperativos \emph{versus} queries declarativas, optimização ao nível da compilação \emph{versus} optimização ao nível da query, algoritmos e estruturas de dados \emph{versus} relações e índices, threads \emph{versus} transações, ponteiros nulos \emph{versus} nulo como ausência de dados \cite{Cook2005}.

Desde sempre, a generalidade dos programas necessitou de alguma forma de dados permanentes. Alguns programas implementam sistemas de armazenamento específicos, mas a verdade é que existem diversos sistemas cuja principal função é a gestão eficiente dos dados. Os \glspl{rbms} (\glssymbol{rbms}) constituem soluções aceites e bem estabelecidas para essa função, e que apesar de surgirem soluções no âmbito de bases de dados orientadas a objectos, crê-se que os sistemas de base de dados relacionais continuem a existir por muitos mais anos \cite{Chen1995}. Dois exemplos de popularidade são a Oracle Database e o SQL Server da Microsoft \cite{DBPOP}. Existe assim, a necessidade de encontrar uma solução para a integração de linguagens de programação e bases de dados. 

Têm sido realizados vários esforços para integrar linguagens de programação e bases de dados. Exemplos são a exploração de linguagens de programação especializadas em base de dados, persistência ortogonal, bases de dados orientadas a objectos, modelos de transação, bibliotecas de acesso a dados, \emph{embedded queries}, e mapeamento objecto-relacional \cite{Cook2005}.

A persistência ortogonal consiste em estender a existência de um objecto para além do tempo de duração da execução de um programa \cite{Atkinson1995}. Um dos problemas da persistência ortogonal é que não dá espaço a optimizações \cite{Cook2005}. PJama \cite{PJama} e OPJ \cite{Atkinson1996,Marquez2000} são exemplos de persistência ortogonal.

Como alternativa à persistência ortogonal existe a execução explícita de queries. 
A Call Level Interface (CLI) \cite{ISOCLI1995} é um mecanismo predominante na execução explícita de queries, e permite à linguagem de programação o acesso ao \gls{databaseengine} a partir de uma API estandardizada. Um dos principais problemas da CLI é a ausência de tipagem estática, o que causa a detecção de erros apenas em \emph{runtime}. No entanto, permite melhorar o desempenho geral através da redução da latência na comunicação \cite{Cook2005}. ODBC e JDBC são dois exemplos.
As \emph{embedded queries} constituem outro mecanismo de execução explícita de queries. Neste mecanismo as instruções (\glsplural{statement}) são escritas directamente no código fonte da linguagem de programação. Este mecanismo está a deixar de ser suportado por diversos sistemas, como por exemplo o Microsoft SQL Server \cite{MSDeprecated} e Sybase \cite{SybaseDeprecated}.

Apesar das inúmeras soluções que surgiram e continuam a surgir, ainda não se chegou a um consenso na escolha de uma solução definitiva para o problema da integração.
Na escolha da utilização de uma das soluções, existem alguns factores a considerar tais como a portabilidade e o desempenho.

A linguagem Java permite escrever aplicações independentes da plataforma, para sistemas computacionais fixos ou móveis, tendo por isso um elevado nível de portabilidade. 
A optimização ao nível da \gls{jvm}, torna a linguagem uma solução forte também no âmbito do desempenho \cite{OPTJVM}. Para além disso, sendo o JDBC uma CLI, permite o acesso directo ao \gls{databaseengine}, dando flexibilidade para outras opções de desempenho.
\hfill \\

A generalização da utilização da linguagem Java e a existência de vários \glsplural{rbms} com raízes profundas, faz do JDBC um objecto de alvo estudo.
